package scalaLearning.scalaBasic


object TestCollection {
  def main(args: Array[String]) {

    var t = List(1,2,3,5,5)
    println("---001--"+t(2))


    //		map 个位置相加  函数编程  map是一个函数与传统的map集合没有什么关系
    println(t.map(a=> {print("***"+a); a+2}))
    //传递一个匿名函数进去    a代表t中的每个元素

    println(t.map(_+1))

    var t2 = t.+:("test")//添加元素 “ .+:”
      		println(6::t2)
       		println(t2)//t2没有变化
        	t2 = t::6::Nil//组成新的List  t作为t2的一个元素，是一个List    6 是个单镚  Nil表示长度为0的list
       		println(t2)

  //   		t2.foreach(t=>print("---+++"+t)) //这个方法怎么简写 “_”
   //        t2.foreach(print(_))

     //   	println("/--***---"+t.distinct)//集合中去重的方法  输出：/--***---List(1, 2, 3, 5)


     //		println("---+++++********************Slice    "+t.slice(0, 2))//对集合进行切分    左闭右开[  ) 取出 1 和2

//    		println("-*--*--*--*--*--*--*--*--*-")
//    		for(temp <- t2){       //“<-”对集合进行遍历
//    		  print(temp)
//    		}

//    		println("-*--*--*--*--*--*--*--*--*-")
//    		for(i <-   0 to t2.length-1 ){
//    		  println(i)
//    		  println(t2(i))
//    		}


    	//	println("-*--*--*--*--*--*--*--*--*-")
    //以0开始传递进来两个值  柯里化函数()()  第一个是(0)
    // 第二个是   ({ (sum,num)=>print(sum+"--"+num+" "); sum+num}) 这一长串
    //然后，第二个参数里面是一个匿名函数
    //匿名函数的两个参数(sum,num) 返回的是  sum+num
//    		println(t./:(100)({      //t.是调用的“/”这个方法，传递一个初始参数 0
//    		    (sum,num)=>print(sum+"--"+num+" ");//sum相当于第一个开始位置的0 ，num是t里面的元素  1  2 3  5  5
//    			sum+num
//    		}));//如果以100为开始  那么sum开始为100 输出为100+16=116

        /*输出：
        -*--*--*--*--*--*--*--*--*-  16是1 2 3  5  5 加在一起得到的
        0--1 1--2 3--3 6--5 11--5 16
        * */





    // 1,2,3,5,5
    //map 是分分合合里面的分
    //reduce 是 合  到底是该怎么合  这靠的是里面的匿名参数告诉他的逻辑
    //print(t.reduce((x,y)=>{x+y}))//参数是(x,y)，方法体是{x+y}    x和y分别都代表什么意思？ x是每次返回的结果  y是下一次操作的元素
    //把过程打印出来就是
//    println(t.reduce((x,y)=>{println(x+" "+ y);x+y}))
//
//    println(t.reduce(_+_))//用 “+”的方法  //  _+_  开始时：“_”和“_”分别代表集合中相邻的两个元素
//                            //                         下一次代表  累积的元素和 + 下一个元素
//    println(t.reduce(_-_))//用 “-”的方法


    //		println("-*--*--*--*--*--*--*--*--*-")
    //		println(t.foldLeft(10)((sum,num)=>{print(sum+"--"+num+" ");//这个和“\:”是等价的
    //			num+sum;
    //		}));

    //		println("-*--*--*--*--*--*--*--*--*-")
    //		println(t.map(v =>v+2));//传递一个匿名函数
    //		println(t.map(_+2));//简写

    //println("========================以上都是list======================================")



    //println("========================以下开始元组======================================")
    //		元组  不用写任何的类型定义，直接写上小括号（）就可以了
    // 元组的特点是：  定义了元组之后里面的值是不能改变的
    //                   里面下标index的取值不是从0 开始的 而是从1开始的
//    var tuple01 = (1,5,6,6);
//    println(tuple01._1)//取值1
//    println(tuple01._4)//取值6

    val names = List("Alice","Bob","nICK")
    def upper(s:String):String ={
      s.toUpperCase()
    }
    println(names.flatMap(upper))
    def find(s:String):Boolean={
      s.startsWith("A")
    }
    println(names.filter(find))







  }
}